HyperBloch package tutorial

Flat-bands; hyperbolic Lieb lattices

This notebook provides solved exercises aimed to introduce the functionality of the  HyperBloch package for efficient modeling of tight-binding models on hyperbolic lattices. It is intended to be used in tandem with the HyperBloch Flat-bands tutorial on the HyperCells&HyperBloch website. In this tutorial, we demonstrate the emergence of flat-bands in the density of states of an elementary nearest-neighbor hopping model on the {6,4}-Lieb lattice. In particular, we emphasize the workflow for Abelian Hyperbolic band theory (AHBT) analysis with the supercell method of Lieb (supercell) model graphs  (constructed through HyperBloch’s sister package HyperCells), which is structurally unchanged compared to the analysis of tessellation (supercell) model graphs.

Preliminaries:

Remarks:

Before using the notebook to the Flat-bands tutorial for hyperbolic Lieb lattices:

Make sure that the HyperBloch package is installed, if this is not the case please follow the instruction on the website HyperCells&HyperBloch installation.

Make sure that the required files .hcc,  .hcm and .hcs files are in the current directory. This entails files:

(2,4,6)_T2.2_3.hcc
{6,4}-Lieb_T2.2_3.hcm
{6,4}-Lieb_T2.2_3_sc-T5.4.hcs
{6,4}-Lieb_T2.2_3_sc-T9.3.hcs

In case no such files exist in your current directory, please follow the instructions in the  HyperBloch Flat-bands tutorial,  or download the files there.

Documentation:

You may want to take a look at the basic usage guide of the HyperBloch package or the available functions within the package, respectively:

Documentation`HelpLookup["PatrickMLenggenhager/HyperBloch/tutorial/BasicUsage"];

Documentation`HelpLookup["PatrickMLenggenhager/HyperBloch/guide/HyperBlochPackage"];

Load the HyperBloch package:

The HyperBloch package can be loaded as follows:

<<PatrickMLenggenhager`HyperBloch`

Set the directory of the needed HyperCells files remarked above, which is assumed to be the directory of this file:

SetDirectory[NotebookDirectory[]];

Needed functions:

In previous tutorials, getting started with the HyperBloch package and HyperBloch Supercells tutorial, we have calculated the density of states of various nearest-neighbor tight-binding models via exact diagonalization and random samples. We predefine a function in order to calculate the eigenvalues for the Abelian Bloch Hamiltonians that we will construct. We  take advantage of the independence of different momentum sectors and parallelize the computation, where we partition the set of Npts into  Nruns subsets:

ComputeEigenvalues[cfH_,Npts_,Nruns_,genus_]:=
Flatten@ParallelTable[
Flatten@Table[
Eigenvalues[cfH@@RandomReal[{-Pi,Pi},2genus]],{i,1,Round[Npts/Nruns]}],
{j,1,Nruns},Method->"FinestGrained"]

{6,4} Lieb lattice:

Preliminaries:

We consider the following sequence of supercells, defined in terms of triangle group quotients given in the tabulated list of quotients by Marston Conder:

cellsLieb={"T2.2","T5.4","T9.3"};

where we consider the unit cell T2.2 as the primitive cell.

Import (supercell) model graphs:

We first import the cell, model, and supercell model graphs as produced by the HyperCells package:

Cell graph:

pcellLieb=ImportCellGraphString[Import["(2,4,6)_T2.2_3.hcc"]];

Primitive cell:

pcmodelLieb=ImportModelGraphString[Import["{6,4}-Lieb_T2.2_3.hcm"]];

Consecutive supercells:

scmodelsLieb=Association[#->ImportSupercellModelGraphString[ Import["{6,4}-Lieb_T2.2_3_sc-"<>#<>".hcs"]]&/@cellsLieb[[2;;]]];

We can extract the genera of the compactified unit cells programmatically:

genusLstLieb = Join[
Association[cellsLieb[[1]]->pcmodelLieb["Genus"]],
Association[#->scmodelsLieb[#]["Genus"]&/@cellsLieb[[2;;]]]
];

Visualize the model graph:

Wyckoff positions:

Hyperbolic Lieb lattices are specified by placing vertices at Wyckoff positions 1 and 2 for {p,q}-tessellations of the hyperbolic plane (here we choose 1 and 2 corresponding to the x and y vertices of the fundamental Schwarz triangle). We can visualize these vertices in the Poincaré disk together with a specific Schwarz triangle, it is instructive to use the  fundamental Schwarz triangle.

We can visualize Wyckoff positions of the fundamental Schwarz triangle through the function GetWyckoffPosition, which enables us to extract the corresponding coordinates in the Poincaré disk, where we will use the label "1" that identifies the symmetry operation relating the vertices of the fundamental Schwarz triangle to the Wyckoff positions:

x=GetWyckoffPosition[{2,4,6},{1,"1"}];
y=GetWyckoffPosition[{2,4,6},{2,"1"}];

We can highlighted individual Schwarz triangles in the Poincaré disk through the function  GetSchwarzTriangle. Let us extract the Polygon representing the fundamental Schwarz triangle associated with the identity element in the proper triangle group (SuperPlus[Δ])(2,4,6):

sf=GetSchwarzTriangle[{2,4,6},"1"];

The fundamental Schwarz triangle can be visualized in the Poincaré disk, we may choose the function ShowTriangles to achieve this:

Show[
ShowTriangles[{2,4,6},ImageSize->300,NumberOfGenerations->2],
Graphics[{Darker[Gray,0.01],sf}],
Graphics[{Text[Style["(Subscript[s, f])",17,Thick,White],{0.3,0.09}]}],

Graphics[{Darker[Green,0.3],PointSize[0.02],Point@x}],
Graphics[{Darker[Blue,0.3],PointSize[0.02],Point@y}],

Graphics[{Darker[Green,0.5],Text[Style["1",17,Thick],{0.38,0.30}]}],
Graphics[{Darker[Blue,0.5],Text[Style["2",17,Thick],{0.48,-0.15}]}],

ImageSize->400
]

Model graph:

We can visualize the model graph with the high-level visualization function VisualizeModelGraph, where we highlight the two Wyckoff positions in the fundamental Schwarz triangle:

Show[
VisualizeModelGraph[pcmodelLieb,
CellGraph->pcellLieb,
NumberOfGenerations->3,
Elements-><|
	ShowCellGraphFlattened->{},
	ShowCellBoundary->{ShowEdgeIdentification->True}
|>],

Graphics[{Darker[Gray,0.01],Opacity[0.4],sf}],
Graphics[{Text[Style["(Subscript[s, f])",17,Thick,White],{0.3,0.09}]}],

Graphics[{Darker[Green,0.3],PointSize[0.03],Point@x}],
Graphics[{Darker[Blue,0.3],PointSize[0.03],Point@y}],

Graphics[{Darker[Green,0.5],Text[Style["1",17,Thick],{0.30,0.17}]}],
Graphics[{Darker[Blue,0.5],Text[Style["2",17,Thick],{0.43,0.00}]}],

ImageSize->400
]

Edges:

Unlike tesselation and kagome model graphs, which we will see after, the EdgeTags of Lieb models graphs are of a reduced form. Let us take a look at the edges in the model graph:

EdgeList@pcmodelLieb["Graph"]

Each element in the list is a DirectedEdge, connecting a pair of vertices. The EdgeTags (list above the arrows) for the nearest-neighbour edges take the form {1, s}, where the first entry, 1, indicates a nearest-neighbor edge, and s is the positions of the Schwarz triangles associated with the cell-graph edges in (Subscript[T, (SuperPlus[Δ])])(Γ).

Construct Abelian Bloch Hamiltonians:

Once the (supercell) model graphs are imported the corresponding Abelian Bloch Hamiltonians can be constructed.

Primitive cell:

HpcLieb=AbelianBlochHamiltonian[pcmodelLieb,1,0&,-1&,CompileFunction->True];

Consecutive supercells (this might take a minute):

HscLieblst=Association[#->AbelianBlochHamiltonian[scmodelsLieb[#],1,0&,-1&,PCModel->pcmodelLieb,CompileFunction->True]&/@cellsLieb[[2;;]]];

For convenience, let us collect the constructed Hamiltonians in one Association:

HcLieblst=Join[Association[cellsLieb[[1]]->HpcLieb],HscLieblst];

Density of states:

We compute the Eigenvalues with a set of  (10^4) random samples in momentum space and 32 subsets, (this might take a minute):

evalsLieb=Association[#->ComputeEigenvalues[HcLieblst[#],(10^4),32,genusLstLieb[#]]&/@cellsLieb];

Let us construct a list of colors for the different unit cells we are considering:

cLst=(ColorData["SunsetColors","ColorFunction"]/@(1-Range[1,3]/3.));

We choose to visualize the density of states via a kernel density estimation with an energy binwidth of 0.01, (this might take a minute):

SmoothHistogram[evalsLieb,0.01,"PDF",
Frame->True,FrameLabel->{"Energy E","Density of states"},FrameStyle->Black,
ImageSize->500,ImagePadding->{{Automatic, 10}, {Automatic, 10}},LabelStyle->20,
PlotLabel->"k sampling: (10^4)",PlotRange->{0,1},PlotStyle->cLst]

Pronounced flat-bands emerge in density of states, centered around zero energy with gaps developing between the flat-bands and the rest of the spectrum.

NotebookSave[]